JMU JMU - Department of Computer Science
Help Tools
Help Understanding Programming Assignments


There are many different reasons for having students complete programming assignments. As a result, they come in many different formats, require many different things, and can vary considerable across courses. This document will help you understand the differences and why they exist. See the "Policies" page for specific policies about this course.

1 Some Learning Objectives of Programming Assignments

In this course, programming assignments help you analyze (i.e., draw connections), evaluate (i.e., justify a decision), and create (i.e., produce original programs). They also help you assess your progress in these regards.

As a practical matter, programming assignments will also help you get better at using a specific set of tools, make you more efficient, improve your planning, and improve your scheduling.

2 The Documents Comprising an Assignment

Because this is an introductory course, there will generally be one document that describes each assignment. This document will contain both a description of the system to be built, and discussions of various academic issues (e.g., a recommended process, due dates, submission requirements, and help). In other words, the document will not look like something you will see in the "real world", it will look like something you have seen in the past as a student.

Other courses you take may provide two different kinds of documents, one document that addresses the academic issues and multiple documents that look like "real world" software engineering documents.

3 Grading

Programming assignment are graded for two primary reasons. First, the grade is an assessment of your mastery of the skills and knowledge required to complete the assignment. Second, the grade is an inducement for you to complete the assignment (i.e., experience has shown that most students do not complete ungraded assignments) and, hence, learn the material.

3.1 Partial Credit

Programming assignments are sometimes graded on an all-or-nothing basis and sometimes partial credit is awarded. There are reasons for both.

All-or-nothing grading helps students realize that "almost working" is often not good enough. For example, would you fly in an airplane in which the avionics software is "almost working"? It also helps students realize that "almost working" is a nebulous concept. If, in fact, a software product is "almost working" then it shouldn't be hard (and shouldn't take much time) to make it "work". However, students often say that something is "almost working" when, in fact, there is still a considerable amount of work to do.

Partial-credit grading, when done carefully, helps students assess the topics they do and don't understand. Good partial-credit grading schemes award credit for particular concepts, not for the percentage of the assignment that was completed.

Partial-credit grading should not be confused with effort-grading. While everyone appreciates effort, in computer science/software engineering it is expected, not rewarded. In computer science/software engineering, results are rewarded.

3.2 Style Points

Style is a very important aspect of code (as it is with other kinds of "writing" activities). Hence, most programming assignments have style requirements and style is considered when grading.

Because style is so important (e.g., it is very difficult to read code that doesn't satisfy style requirements) and because it is so easy to comply with a style guide, it is common to give a grade of 0 to programming assignments that do not comply.

4 Collaboration Policies

Different courses have different collaboration policies for programming assignments.

The main argument in favor of allowing collaboration on programming assignments is that it helps you learn. It does this by allowing you to learn by doing. That is, you can learn the material while you are using it. Collaboration can also reduce the stress associated with an assignment, allowing you to focus on learning rather than on completing the assignment so that your grade doesn't suffer.

There are two main arguments against collaboration. First, it makes it harder for the instructor to assess your ability to complete a "sizable" assignment (i.e., an assignment that can't be completed within an examination period). Second, it makes it harder for you to assess your own abilities. That is, you might delude yourself into thinking that you know something when, in fact, you don't, because someone else has really done the work. (This is particularly problematic in programming courses, because later courses rely heavily on prerequisite courses.)

Hence, even in a course that allows you to collaborate, you should do so sparingly and in ways that are appropriate and help you learn. Excessive and/or inappropriate collaboration will not help you in the long run, even if it seems to in the short run.

Of course, it is your responsibility to know and follow the collaboration policy for a particular course. See the course "Policies" page for more information about this course.

Copyright 2022